Virtualization technology allows a guest operating system (OS), running on a guest virtual machine (VM), to run under the supervision and control of a host OS (referred to in different contexts as a hypervisor or a virtual machine manager (VMM)). There may be multiple guest VMs (with multiple guest OSs) running in a single computer system (i.e. computer platform), each being allocated a certain amount of dedicated memory space and computational time in the system. There are many occasions where it is desirable for a guest OS/VM running on one physical computer system to be migrated over to another physical computer system.
In order to enable seamless migration of a guest OS/VM between two different physical computer systems, the hypervisor may expose an emulated hardware layer to the guest OS/VM. Thus, even if underlying physical hardware changes during the migration, the guest OS/VM would see the same hardware components before and after the migration.
In input/output (I/O) technology space, it is common for an emulation layer exists that shows a guest OS/VM an emulated generic I/O device in the computer system instead of the actual physical hardware device. Therefore, the hypervisor is required to translate all commands and accesses between the guest OS/VM and the virtual I/O device to commands and accesses compatible with the real hardware I/O device on the platform. This translation scheme creates a performance impact.
To eliminate the emulation layer performance impact, a physical I/O device present on the platform may be directly exposed to the guest OS/VM. But this can lead to issues such as scalability, isolation, and mobility. In the context of scalability, it is difficult to efficiently assign a limited number of I/O devices on a platform to a large number of guests. With isolation, it is also difficult to ensure a specific I/O device will only be allowed to access the appropriate guest OS/VM address space. And as far as mobility, migrating a guest OS/VM between machines with disparate I/O devices also causes problems that are difficult to fix seamlessly.